from django.db import models


class DateTimeModelMixin(models.Model):
    # 封装创建时间 修改时间
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')

    # 只是封装做继承使用 不需要对这个拓展模型类在mysql当中生成实际的表格
    class Meta:
        abstract = True  # 指定类为抽象模型类 并不会在迁移映射中生成对应的模型表


class IsDeleteModelMixin(models.Model):
    is_delete = models.BooleanField(default=False, verbose_name="逻辑删除")

    class Meta:
        abstract = True  # 指定类为抽象模型类 并不会在迁移映射中生成对应的模型表

    def delete(self, using=None, keep_parents=False):
        # 把 is_delete 修改为True
        self.is_delete = True
        self.save()


class ModelSetMixin(DateTimeModelMixin, IsDeleteModelMixin):
    class Meta:
        abstract = True

        """
        abstract = True 抽象类
        抽象类：
        1. 抽象类不能实例化对象
        2. 抽象类不能创建表
        3. 抽象类可以继承
        """